﻿using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using Novapangeia.Dominio;
using Novapangeia.RepositorioNHibernate;
using SharpArch.Data.NHibernate;

namespace Novapangeia.Negocio
{
    /// <summary>
    /// Classe responsável por Gerenciar todos os artefatos
    /// de tecnologia
    /// </summary>
    public class GerenciadorTecnologia
    {
        private static bool Atualizar(Usuario usuario)
        {
            using (UnitOfWork.Start())
            {
                RepositorioUsuario repositorioUsuario = new RepositorioUsuario();
                repositorioUsuario.SaveOrUpdate(usuario);

                RepositorioEstoque repositorioEstoque = new RepositorioEstoque();
                repositorioEstoque.SaveOrUpdate(usuario.recursos);

                RepositorioTecnologia repositorioTecnologia = new RepositorioTecnologia();
                repositorioTecnologia.SaveOrUpdate(usuario.tecnologias);

                //return sqlHelper.SaveChanges();
            }
            return true;
        }

        /// <summary>
        /// Metodo libera tecnologia Cavalaria e debita o recursos
        /// </summary>
        /// <param name="u">Classe Usuario</param>
        /// <returns></returns>
        public static bool CavalariaLiberada(Usuario u)
        {
            if (u.tecnologias.Espadas)
            {
                return true;
            }
            return false;
        }

        public static bool ArcosLiberado(Usuario u)
        {
            if (u.tecnologias.Espadas)
            {
                return true;
            }
            return false;
        }

        public static bool EspadaLiberada(Usuario u)
        {
            if (u.tecnologias.Lancas)
            {
                return true;
            }
            return false;
        }

        /// <summary>
        /// Debita os recursos necessarios para implantar a tecnologia
        /// </summary>
        /// <param name="u"></param>
        /// <returns></returns>
        public static bool PodePagarCavalaria(Usuario u)
        {
            return u.PodePagar(Constantes.CUSTOCAVALARIA);
        }
        public static bool PodePagarEngenharia(Usuario u)
        {
            return u.PodePagar(Constantes.CUSTOENGENHARIA);
        }
        public static bool PodePagarEspadas(Usuario u)
        {
            return u.PodePagar(Constantes.CUSTOESPADAS);
        }
        public static bool PodePagarLancas(Usuario u)
        {
            return u.PodePagar(Constantes.CUSTOLANCAS);
        }
        public static bool PodePagarArcos(Usuario u)
        {
            return u.PodePagar(Constantes.CUSTOARCOS);
        }

        public static bool pesquisarCavalaria(Usuario u)
        {
            if (u.PodePagar(Constantes.CUSTOCAVALARIA))
            {
                u.DebitarRecursos(Constantes.CUSTOCAVALARIA);
                u.tecnologias.Cavalaria = true;
                return Atualizar(u);
            }
            return false;
        }

        public static bool pesquisarEngenharia(Usuario u)
        {
            if (u.PodePagar(Constantes.CUSTOENGENHARIA))
            {
                u.DebitarRecursos(Constantes.CUSTOENGENHARIA);
                u.tecnologias.Engenharia = true;
                return Atualizar(u);
            }
            return false;
        }

        public static bool pesquisarArcos(Usuario u)
        {
            if (u.PodePagar(Constantes.CUSTOARCOS))
            {
                u.DebitarRecursos(Constantes.CUSTOARCOS);
                u.tecnologias.Arcos = true;
                return Atualizar(u);
            }
            return false;
        }

        public static bool pesquisarEspadas(Usuario u)
        {
            if (u.PodePagar(Constantes.CUSTOESPADAS))
            {
                u.DebitarRecursos(Constantes.CUSTOESPADAS);
                u.tecnologias.Espadas = true;
                return Atualizar(u);
            }
            return false;
        }

        public static bool pesquisarLancas(Usuario u)
        {
            if (u.PodePagar(Constantes.CUSTOLANCAS))
            {
                u.DebitarRecursos(Constantes.CUSTOLANCAS);
                u.tecnologias.Lancas = true;
                return Atualizar(u);
            }
            return false;
        }
    }
}
